<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>分布式系统理论精要</title>
    <link rel="stylesheet" href="https://cdn.staticfile.org/font-awesome/6.4.0/css/all.min.css">
    <link rel="stylesheet" href="https://cdn.staticfile.org/tailwindcss/2.2.19/tailwind.min.css">
    <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/mermaid@latest/dist/mermaid.min.js"></script>
    <style>
        body {
            font-family: 'Noto Sans SC', Tahoma, Arial, Roboto, "Droid Sans", "Helvetica Neue", "Droid Sans Fallback", "Heiti SC", "Hiragino Sans GB", Simsun, sans-serif;
            background-color: #f8fafc;
            color: #1e293b;
            line-height: 1.6;
        }
        .hero-gradient {
            background: linear-gradient(135deg, #4f46e5 0%, #7c3aed 50%, #9333ea 100%);
        }
        .section-card {
            transition: all 0.3s ease;
            box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
        }
        .section-card:hover {
            transform: translateY(-5px);
            box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
        }
        .highlight-text {
            background: linear-gradient(90deg, #6366f1, #8b5cf6);
            -webkit-background-clip: text;
            background-clip: text;
            color: transparent;
        }
        .drop-cap::first-letter {
            font-size: 4em;
            float: left;
            line-height: 0.85;
            margin: 0.1em 0.2em 0 0;
            color: #4f46e5;
            font-weight: bold;
        }
    </style>
</head>
<body>
    <!-- Hero Section -->
    <section class="hero-gradient text-white py-20 px-4 sm:px-6 lg:px-8">
        <div class="max-w-5xl mx-auto text-center">
            <h1 class="text-4xl md:text-6xl font-bold mb-6">分布式系统<span class="highlight-text">理论精要</span></h1>
            <p class="text-xl md:text-2xl font-light mb-8 max-w-3xl mx-auto">探索构建可靠、可扩展分布式系统的核心理论与最佳实践</p>
            <div class="flex justify-center space-x-4">
                <a href="#cap" class="px-6 py-3 bg-white text-indigo-600 font-medium rounded-lg hover:bg-opacity-90 transition-all">开始探索</a>
            </div>
        </div>
    </section>

    <!-- Main Content -->
    <div class="max-w-6xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
        <!-- Introduction -->
        <section class="mb-16">
            <p class="text-lg md:text-xl text-slate-700 leading-relaxed drop-cap">
                分布式系统的理论构成了该领域的基础，解释了分布式系统中面临的核心问题，并提供了方法和框架来设计和构建这些系统。每个理论都在理解和设计分布式系统中起到了重要作用。
            </p>
        </section>

        <!-- CAP Theorem -->
        <section id="cap" class="mb-16">
            <div class="section-card bg-white rounded-xl p-8">
                <div class="flex items-center mb-6">
                    <div class="bg-indigo-100 p-3 rounded-lg mr-4">
                        <i class="fas fa-project-diagram text-indigo-600 text-2xl"></i>
                    </div>
                    <h2 class="text-3xl font-bold text-slate-800">CAP 定理</h2>
                </div>
                <p class="text-slate-600 mb-6">
                    <strong>CAP 定理</strong>，又称 Brewer 定理，由 Eric Brewer 提出，描述了在分布式数据存储中，系统不能同时保证以下三个特性：
                </p>
                
                <div class="grid md:grid-cols-3 gap-6 mb-8">
                    <div class="bg-indigo-50 p-6 rounded-lg">
                        <h3 class="text-lg font-semibold text-indigo-800 mb-3">一致性 (Consistency)</h3>
                        <p class="text-slate-600">所有节点在同一时间具有相同的数据</p>
                    </div>
                    <div class="bg-pink-50 p-6 rounded-lg">
                        <h3 class="text-lg font-semibold text-pink-800 mb-3">可用性 (Availability)</h3>
                        <p class="text-slate-600">每个请求都能接收到一个（成功或失败）响应</p>
                    </div>
                    <div class="bg-purple-50 p-6 rounded-lg">
                        <h3 class="text-lg font-semibold text-purple-800 mb-3">分区容错性 (Partition Tolerance)</h3>
                        <p class="text-slate-600">系统能够在网络分区的情况下继续运行</p>
                    </div>
                </div>
                
                <p class="text-slate-600">
                    CAP 定理指出，在网络分区发生时，分布式系统必须在一致性和可用性之间做出选择。这意味着无论系统如何设计，在发生网络分区时，只能保证一致性或可用性中的一个，无法同时保证三者。
                </p>
                
                <!-- Mermaid Diagram -->
                <div class="mt-8">
                    <div class="mermaid">
                        graph TD
                            A[CAP 定理] --> B[Consistency]
                            A --> C[Availability]
                            A --> D[Partition Tolerance]
                            B -->|网络分区时| E[选择一致性]
                            C -->|网络分区时| F[选择可用性]
                            style A fill:#4f46e5,color:#fff,stroke:#4f46e5
                    </div>
                </div>
            </div>
        </section>

        <!-- BASE Theory -->
        <section id="base" class="mb-16">
            <div class="section-card bg-white rounded-xl p-8">
                <div class="flex items-center mb-6">
                    <div class="bg-pink-100 p-3 rounded-lg mr-4">
                        <i class="fas fa-chart-line text-pink-600 text-2xl"></i>
                    </div>
                    <h2 class="text-3xl font-bold text-slate-800">BASE 理论</h2>
                </div>
                <p class="text-slate-600 mb-6">
                    <strong>BASE 理论</strong>（Basically Available, Soft state, Eventually consistent）是对 CAP 理论中一致性和可用性权衡的一种延展。BASE 理论与 ACID 理论（事务中的原子性、一致性、隔离性、持久性）相对，特别适用于大型分布式系统。
                </p>
                
                <div class="grid md:grid-cols-3 gap-6 mb-8">
                    <div class="bg-pink-50 p-6 rounded-lg">
                        <h3 class="text-lg font-semibold text-pink-800 mb-3">基本可用 (Basically Available)</h3>
                        <p class="text-slate-600">系统保证基本可用性，但不要求强一致性或立即可用性</p>
                    </div>
                    <div class="bg-purple-50 p-6 rounded-lg">
                        <h3 class="text-lg font-semibold text-purple-800 mb-3">软状态 (Soft state)</h3>
                        <p class="text-slate-600">系统允许存在中间状态，而不要求所有节点的状态始终一致</p>
                    </div>
                    <div class="bg-indigo-50 p-6 rounded-lg">
                        <h3 class="text-lg font-semibold text-indigo-800 mb-3">最终一致性 (Eventually consistent)</h3>
                        <p class="text-slate-600">系统最终会达到一致状态，但不保证实时一致性</p>
                    </div>
                </div>
                
                <p class="text-slate-600">
                    这种策略常用于分布式数据库和缓存系统，如 Cassandra 和 Dynamo。
                </p>
            </div>
        </section>

        <!-- Paxos & Raft -->
        <section id="paxos-raft" class="mb-16">
            <div class="section-card bg-white rounded-xl p-8">
                <div class="flex items-center mb-6">
                    <div class="bg-purple-100 p-3 rounded-lg mr-4">
                        <i class="fas fa-network-wired text-purple-600 text-2xl"></i>
                    </div>
                    <h2 class="text-3xl font-bold text-slate-800">Paxos 与 Raft 一致性算法</h2>
                </div>
                
                <div class="grid md:grid-cols-2 gap-8">
                    <div class="bg-gradient-to-br from-purple-50 to-indigo-50 p-6 rounded-lg">
                        <h3 class="text-2xl font-bold text-purple-800 mb-4">Paxos</h3>
                        <p class="text-slate-600 mb-4">
                            由 Leslie Lamport 提出，是一种解决分布式系统中一致性问题的算法，特别用于实现容错的分布式系统。
                        </p>
                        <p class="text-slate-600">
                            Paxos 的核心在于通过选举领导者来协调节点的决策，确保即使在部分节点失败的情况下，系统仍能达成一致。
                        </p>
                    </div>
                    
                    <div class="bg-gradient-to-br from-blue-50 to-indigo-50 p-6 rounded-lg">
                        <h3 class="text-2xl font-bold text-blue-800 mb-4">Raft</h3>
                        <p class="text-slate-600 mb-4">
                            Raft 是一种相对简单的实现一致性的算法，设计目的是提高可理解性，同时保持与 Paxos 类似的性能。
                        </p>
                        <p class="text-slate-600">
                            Raft 通过选举一个领导者节点来管理日志复制，确保所有节点的一致性。它的设计重点是易于理解和实现，因此在工程实践中得到了广泛应用。
                        </p>
                    </div>
                </div>
                
                <!-- Mermaid Diagram -->
                <div class="mt-8">
                    <div class="mermaid">
                        flowchart LR
                            subgraph Raft算法流程
                                A[选举领导者] --> B[日志复制]
                                B --> C[提交日志]
                                C --> D[应用状态机]
                            end
                            style A fill:#7c3aed,color:#fff,stroke:#7c3aed
                            style B fill:#7c3aed,color:#fff,stroke:#7c3aed
                            style C fill:#7c3aed,color:#fff,stroke:#7c3aed
                            style D fill:#7c3aed,color:#fff,stroke:#7c3aed
                    </div>
                </div>
            </div>
        </section>

        <!-- 2PC & 3PC -->
        <section id="2pc-3pc" class="mb-16">
            <div class="section-card bg-white rounded-xl p-8">
                <div class="flex items-center mb-6">
                    <div class="bg-blue-100 p-3 rounded-lg mr-4">
                        <i class="fas fa-exchange-alt text-blue-600 text-2xl"></i>
                    </div>
                    <h2 class="text-3xl font-bold text-slate-800">两阶段提交（2PC）与三阶段提交（3PC）</h2>
                </div>
                
                <div class="grid md:grid-cols-2 gap-8">
                    <div class="bg-blue-50 p-6 rounded-lg">
                        <h3 class="text-2xl font-bold text-blue-800 mb-4">两阶段提交 (2PC)</h3>
                        <p class="text-slate-600 mb-4">
                            两阶段提交协议分为两个阶段：准备阶段和提交阶段。
                        </p>
                        <ol class="list-decimal list-inside text-slate-600 space-y-2">
                            <li>准备阶段：协调者向所有参与者发送准备请求，等待他们的回复</li>
                            <li>提交阶段：如果所有参与者都准备就绪，协调者发出提交请求；否则，发出回滚请求</li>
                        </ol>
                        <p class="text-slate-600 mt-4">
                            虽然 2PC 能确保分布式事务的一致性，但在网络分区或协调者故障时，可能导致参与者长时间等待。
                        </p>
                    </div>
                    
                    <div class="bg-teal-50 p-6 rounded-lg">
                        <h3 class="text-2xl font-bold text-teal-800 mb-4">三阶段提交 (3PC)</h3>
                        <p class="text-slate-600 mb-4">
                            三阶段提交协议是在 2PC 的基础上增加了一个中间阶段，目的是减少阻塞和提高容错性。
                        </p>
                        <ol class="list-decimal list-inside text-slate-600 space-y-2">
                            <li>CanCommit阶段：协调者询问参与者是否可以提交</li>
                            <li>PreCommit阶段：参与者锁定资源并准备提交</li>
                            <li>DoCommit阶段：实际执行提交操作</li>
                        </ol>
                        <p class="text-slate-600 mt-4">
                            3PC 通过增加超时和协调者对参与者的询问，减少了参与者等待的时间，提高了协议的可用性，但同时也增加了实现的复杂性。
                        </p>
                    </div>
                </div>
            </div>
        </section>

        <!-- Byzantine Generals Problem -->
        <section id="byzantine" class="mb-16">
            <div class="section-card bg-white rounded-xl p-8">
                <div class="flex items-center mb-6">
                    <div class="bg-red-100 p-3 rounded-lg mr-4">
                        <i class="fas fa-shield-alt text-red-600 text-2xl"></i>
                    </div>
                    <h2 class="text-3xl font-bold text-slate-800">拜占庭将军问题</h2>
                </div>
                
                <p class="text-slate-600 mb-6">
                    <strong>拜占庭将军问题</strong>（Byzantine Generals Problem）描述了分布式系统中节点可能出现任意故障（拜占庭故障）时，如何在不可信的环境中达成一致。拜占庭将军问题强调，即使存在恶意节点，系统仍需确保其余节点能够达成一致。
                </p>
                
                <div class="bg-red-50 p-6 rounded-lg mb-6">
                    <h3 class="text-2xl font-bold text-red-800 mb-4">拜占庭容错算法 (BFT)</h3>
                    <p class="text-slate-600">
                        解决拜占庭问题的算法通常被称为 <strong>拜占庭容错算法</strong>（Byzantine Fault Tolerance, BFT），如 PBFT（Practical Byzantine Fault Tolerance）。这些算法对于区块链和高安全性分布式系统尤为重要。
                    </p>
                </div>
                
                <!-- Mermaid Diagram -->
                <div class="mt-8">
                    <div class="mermaid">
                        graph TD
                            A[将军] -->|发送正确命令| B[将军]
                            A -->|发送错误命令| C[叛变将军]
                            B --> D[忠实将军]
                            C --> E[混淆命令]
                            style C fill:#ef4444,color:#fff,stroke:#ef4444
                    </div>
                </div>
            </div>
        </section>

        <!-- Gossip Protocol -->
        <section id="gossip" class="mb-16">
            <div class="section-card bg-white rounded-xl p-8">
                <div class="flex items-center mb-6">
                    <div class="bg-green-100 p-3 rounded-lg mr-4">
                        <i class="fas fa-bullhorn text-green-600 text-2xl"></i>
                    </div>
                    <h2 class="text-3xl font-bold text-slate-800">Gossip 协议</h2>
                </div>
                
                <p class="text-slate-600 mb-6">
                    <strong>Gossip 协议</strong>是一种去中心化的信息传播协议，常用于大型分布式系统中的节点通信。它模拟了流言的传播方式，节点通过随机选择邻居节点进行信息交换，从而逐步传播信息。
                </p>
                
                <div class="grid md:grid-cols-2 gap-8">
                    <div>
                        <h3 class="text-xl font-semibold text-slate-800 mb-3">特点</h3>
                        <ul class="list-disc list-inside text-slate-600 space-y-2">
                            <li>高度容错性</li>
                            <li>优秀的扩展性</li>
                            <li>最终一致性</li>
                            <li>去中心化</li>
                        </ul>
                    </div>
                    
                    <div>
                        <h3 class="text-xl font-semibold text-slate-800 mb-3">应用场景</h3>
                        <ul class="list-disc list-inside text-slate-600 space-y-2">
                            <li>分布式数据库</li>
                            <li>集群管理</li>
                            <li>服务发现</li>
                            <li>状态信息传播</li>
                        </ul>
                    </div>
                </div>
            </div>
        </section>

        <!-- Distributed Lock & Consistent Hashing -->
        <section id="lock-hashing" class="mb-16">
            <div class="section-card bg-white rounded-xl p-8">
                <div class="flex items-center mb-6">
                    <div class="bg-yellow-100 p-3 rounded-lg mr-4">
                        <i class="fas fa-lock text-yellow-600 text-2xl"></i>
                    </div>
                    <h2 class="text-3xl font-bold text-slate-800">分布式锁与一致性哈希</h2>
                </div>
                
                <div class="grid md:grid-cols-2 gap-8">
                    <div class="bg-yellow-50 p-6 rounded-lg">
                        <h3 class="text-2xl font-bold text-yellow-800 mb-4">分布式锁</h3>
                        <p class="text-slate-600 mb-4">
                            在分布式环境中，分布式锁用于控制多个节点对共享资源的访问。常见的实现方式包括基于 Redis、Zookeeper 和 etcd 的分布式锁。
                        </p>
                        <p class="text-slate-600">
                            分布式锁的设计需要考虑死锁、超时、锁的粒度等问题。
                        </p>
                    </div>
                    
                    <div class="bg-orange-50 p-6 rounded-lg">
                        <h3 class="text-2xl font-bold text-orange-800 mb-4">一致性哈希</h3>
                        <p class="text-slate-600 mb-4">
                            一致性哈希是一种哈希算法，常用于分布式缓存系统和分布式数据库中，以实现数据的负载均衡和动态扩展。
                        </p>
                        <p class="text-slate-600">
                            一致性哈希能够在节点加入或退出时，最小化数据迁移，提高系统的可扩展性。
                        </p>
                    </div>
                </div>
                
                <!-- Mermaid Diagram -->
                <div class="mt-8">
                    <div class="mermaid">
                        flowchart LR
                            subgraph 一致性哈希环
                                A[节点1] --> B[数据A]
                                B --> C[节点2]
                                C --> D[数据B]
                                D --> E[节点3]
                                E --> F[数据C]
                                F --> A
                            end
                    </div>
                </div>
            </div>
        </section>

        <!-- Vector Clock & Logical Clock -->
        <section id="clocks" class="mb-16">
            <div class="section-card bg-white rounded-xl p-8">
                <div class="flex items-center mb-6">
                    <div class="bg-blue-100 p-3 rounded-lg mr-4">
                        <i class="fas fa-clock text-blue-600 text-2xl"></i>
                    </div>
                    <h2 class="text-3xl font-bold text-slate-800">向量时钟与逻辑时钟</h2>
                </div>
                
                <div class="grid md:grid-cols-2 gap-8">
                    <div class="bg-blue-50 p-6 rounded-lg">
                        <h3 class="text-2xl font-bold text-blue-800 mb-4">向量时钟</h3>
                        <p class="text-slate-600 mb-4">
                            向量时钟是一种用于跟踪事件因果关系的机制，特别是在分布式系统中，用于检测事件的并发性。
                        </p>
                        <p class="text-slate-600">
                            每个节点维护一个向量时钟，记录它与其他节点之间的事件关系。通过比较向量时钟，系统可以确定事件的发生顺序和并发性。
                        </p>
                    </div>
                    
                    <div class="bg-indigo-50 p-6 rounded-lg">
                        <h3 class="text-2xl font-bold text-indigo-800 mb-4">逻辑时钟</h3>
                        <p class="text-slate-600 mb-4">
                            由 Lamport 提出的逻辑时钟用于在分布式系统中为事件排序。
                        </p>
                        <p class="text-slate-600">
                            通过为每个事件分配一个时间戳，逻辑时钟能够为系统中的事件提供全局的顺序关系，尽管它不能确定事件的真实时间。
                        </p>
                    </div>
                </div>
            </div>
        </section>

        <!-- Fault Tolerance & Redundancy -->
        <section id="fault-tolerance" class="mb-16">
            <div class="section-card bg-white rounded-xl p-8">
                <div class="flex items-center mb-6">
                    <div class="bg-purple-100 p-3 rounded-lg mr-4">
                        <i class="fas fa-shield-virus text-purple-600 text-2xl"></i>
                    </div>
                    <h2 class="text-3xl font-bold text-slate-800">分布式系统的容错与冗余</h2>
                </div>
                
                <div class="grid md:grid-cols-2 gap-8">
                    <div class="bg-purple-50 p-6 rounded-lg">
                        <h3 class="text-2xl font-bold text-purple-800 mb-4">数据冗余与副本</h3>
                        <p class="text-slate-600 mb-4">
                            分布式系统通过数据冗余和副本来提高系统的容错能力。副本可以分布在不同的物理节点或地理位置，以确保在部分节点失效时，数据仍然可用。
                        </p>
                        <p class="text-slate-600">
                            常见的副本策略包括主从复制、多主复制和链式复制等。
                        </p>
                    </div>
                    
                    <div class="bg-pink-50 p-6 rounded-lg">
                        <h3 class="text-2xl font-bold text-pink-800 mb-4">纠删码</h3>
                        <p class="text-slate-600 mb-4">
                            纠删码是一种高级的数据冗余技术，通过将数据分为多个碎片并进行编码，以实现高效的容错性。
                        </p>
                        <p class="text-slate-600">
                            与传统的镜像备份相比，纠删码能在减少存储空间的同时提供更高的可靠性。
                        </p>
                    </div>
                </div>
            </div>
        </section>

        <!-- Security in Distributed Systems -->
        <section id="security" class="mb-16">
            <div class="section-card bg-white rounded-xl p-8">
                <div class="flex items-center mb-6">
                    <div class="bg-green-100 p-3 rounded-lg mr-4">
                        <i class="fas fa-lock-open text-green-600 text-2xl"></i>
                    </div>
                    <h2 class="text-3xl font-bold text-slate-800">分布式系统中的安全性</h2>
                </div>
                
                <div class="grid md:grid-cols-3 gap-6">
                    <div class="bg-green-50 p-6 rounded-lg">
                        <h3 class="text-xl font-semibold text-green-800 mb-3">认证与授权</h3>
                        <p class="text-slate-600">
                            分布式系统中的认证和授权机制用于确保只有经过认证的用户或服务才能访问系统资源。常见的技术包括 OAuth、JWT、SSL/TLS 等。
                        </p>
                    </div>
                    
                    <div class="bg-teal-50 p-6 rounded-lg">
                        <h3 class="text-xl font-semibold text-teal-800 mb-3">数据加密</h3>
                        <p class="text-slate-600">
                            在分布式系统中，数据加密用于保护数据的机密性，无论是在传输中还是在存储中。加密算法需要兼顾安全性和性能。
                        </p>
                    </div>
                    
                    <div class="bg-blue-50 p-6 rounded-lg">
                        <h3 class="text-xl font-semibold text-blue-800 mb-3">访问控制</h3>
                        <p class="text-slate-600">
                            访问控制机制用于定义和管理系统中各个节点和用户的权限，确保系统资源的安全使用。常见的访问控制模型包括 ACL（访问控制列表）和 RBAC（基于角色的访问控制）。
                        </p>
                    </div>
                </div>
            </div>
        </section>

        <!-- Summary Visualization -->
        <section class="mb-16">
            <div class="section-card bg-white rounded-xl p-8">
                <h2 class="text-3xl font-bold text-slate-800 mb-8 text-center">分布式系统核心理论关系图</h2>
                
                <div class="mermaid">
                    graph TD
                        A[CAP定理] --> B[一致性]
                        A --> C[可用性]
                        A --> D[分区容错性]
                        B --> E[Paxos]
                        B --> F[Raft]
                        B --> G[2PC/3PC]
                        C --> H[BASE理论]
                        H --> I[最终一致性]
                        I --> J[Gossip协议]
                        D --> K[容错与冗余]
                        K --> L[数据副本]
                        K --> M[纠删码]
                        N[拜占庭将军问题] --> O[拜占庭容错]
                        P[分布式锁] --> Q[一致性哈希]
                        R[时钟机制] --> S[向量时钟]
                        R --> T[逻辑时钟]
                        style A fill:#4f46e5,color:#fff,stroke:#4f46e5
                        style N fill:#ef4444,color:#fff,stroke:#ef4444
                </div>
            </div>
        </section>
    </div>

    <script>
        // Initialize Mermaid
        mermaid.initialize({
            startOnLoad: true,
            theme: 'default',
            flowchart: {
                useMaxWidth: true,
                htmlLabels: true,
                curve: 'basis'
            }
        });
        
        // Smooth scrolling for anchor links
        document.querySelectorAll('a[href^="#"]').forEach(anchor => {
            anchor.addEventListener('click', function (e) {
                e.preventDefault();
                document.querySelector(this.getAttribute('href')).scrollIntoView({
                    behavior: 'smooth'
                });
            });
        });
    </script>
</body>
</html>